package main

import (
	"fmt"
)

/**
结构体struct
	特殊的前缀&指向一个结构体的指针
*/

type Vertex struct {
	X int
	Y int
}

type Point struct {
	X, Y, Z int
}

var (
	v1 = Point{3, 4, 5}
	v2 = Point{X: 3}
	v3 = Point{}
	p1 = &Point{5, 12, 13}
)

//定义变量a是一个有十个整数的数组
var a [10]int

func main() {
	fmt.Println(Vertex{1, 2})

	v := Vertex{3, 4}
	fmt.Println(v.X)
	v.Y = 100
	fmt.Println(v.Y)

	w := Vertex{6, 7}
	p := &w
	p.Y = 1e9
	fmt.Println(w)

	fmt.Println("--------------------")
	fmt.Println(v1, v2, v3, *p1, p1)

	fmt.Println("-------------------下面测试数组")
	a[0] = 12
	a[1] = 24
	fmt.Println(a)

	s := []int{2, 3, 4}
	fmt.Println(s)
	fmt.Println(len(s))

	/**
	array[1:4]
	array[:4]	省略下表，代表从1开始
	array[1:]	省略上标，代表到len(s)结束
	*/
	fmt.Println("-------------------Slice切片")
	b := []int{2, 3, 5, 7, 11, 13}
	fmt.Println("b == ", b)
	fmt.Println("b[1:4] == ", b[1:4])

	//生成一个全是0的数组，大小是5
	c := make([]int, 5)
	fmt.Println(c)

	//生成一个指定容量的数组，大小是0，但是容量是5
	d := make([]int, 0, 5)
	fmt.Println(d, len(d), cap(d))

	//slice的零值是：nil

	//向slice末尾添加元素append
	//append(s []T, vs ...T)
	//第一个参数s是一个元素类型为T的slice，其余类型为T的值将会附加到该slice的末尾
	fmt.Println("----------------测试Slice的append")
	var f []int
	fmt.Println(f)
	f = append(f, 0)
	fmt.Println(f)
	f = append(f, 9, 5, 3, 6, 8)
	fmt.Println(f)

	fmt.Println("---------------遍历Slice数组")
	for i, g := range f {
		fmt.Printf("index is %d, and slice[%d] is %d\n", i, i, g)
	}

	fmt.Println("---------Slice续_")
	for j := range f {
		fmt.Println(j, f)
	}

	for range f {
		fmt.Printf("x-man\n")
	}

}
